import HPrint from "@/components/print/index.vue"
import Req from '@/api/order'
import {isEmpty} from "@/utils/util";

export default {
  name: 'BillForm',
  components: {
    HPrint
  },
  data() {
    return {
      formData: {
        deceasedName: '',
        deceasedGender: '',
        serviceDate: '',
        serviceLocation: '',
        paymentMethod: '',
        familyContact: '',
        familyPhone: '',
        masterName: '',
        masterPhone: '',
        // masterName: JSON.parse(localStorage.getItem('user')).userName,
        // masterPhone: JSON.parse(localStorage.getItem('user')).mobile,
        creatorId: JSON.parse(localStorage.getItem('user')).userId,
        creatorName: JSON.parse(localStorage.getItem('user')).userName
      },
      // 表单验证规则
      formRules: {
        deceasedName: [
          { required: true, message: '请输入逝者姓名', trigger: 'blur' }
        ],
        deceasedGender: [
          { required: true, message: '请选择性别', trigger: 'change' }
        ],
        serviceDate: [
          { required: true, message: '请选择服务日期', trigger: 'change' }
        ],
        serviceLocation: [
          { required: true, message: '请输入服务地点', trigger: 'blur' }
        ],
        paymentMethod: [
          { required: true, message: '请选择付款方式', trigger: 'change' }
        ],
        familyContact: [
          { required: true, message: '请输入家属姓名', trigger: 'blur' }
        ],
        familyPhone: [
          { required: true, message: '请输入家属联系方式', trigger: 'blur' }
        ],
      },
      tableData: [],
      // tableData: [
      //   // 寿盒
      //   {
      //     category: '寿盒',
      //     subCategory: '玉石',
      //     name: '名称',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     priceFlag: true,
      //     price: 0,
      //     discountFlag: '1',
      //     discount: '',
      //     discounts: [] // 折扣列表
      //   },
      //   {
      //     category: '寿盒',
      //     subCategory: '木质',
      //     name: '名称',
      //     quantityFlag: '1',
      //     quantity: 1,
      //     priceFlag: '1',
      //     price: 0,
      //     discountFlag: '1',
      //     discount: ''
      //   },
      //   {
      //     category: '寿盒',
      //     subCategory: '铝材',
      //     name: '名称',
      //     quantityFlag: '1',
      //     quantity: 1,
      //     priceFlag: '1',
      //     price: 0,
      //     discountFlag: '1',
      //     discount: ''
      //   },
      //   // 鲜花
      //   {
      //     category: '鲜花',
      //     subCategory: '花盆',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   {
      //     category: '鲜花',
      //     subCategory: '花圈',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   {
      //     category: '鲜花',
      //     subCategory: '花篮',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   {
      //     category: '鲜花',
      //     subCategory: '花球',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   {
      //     category: '鲜花',
      //     subCategory: '心型',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   {
      //     category: '鲜花',
      //     subCategory: '天梯',
      //     name: '',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000,
      //     discountFlag: '0'
      //   },
      //   // 烧盘缠
      //   {category: '烧盘缠', subCategory: '套装', name: '牛、马（大中小）', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '牛', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '马', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '鹅', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '猪', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '烧纸', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '元宝', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '金砖', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '烧盘缠', subCategory: '单品', name: '包款', quantityFlag: '1', quantity: 0, price: 1000},
      //   {
      //     category: '烧盘缠',
      //     subCategory: '烧七',
      //     name: '头七、三七、五七、七七、百日、周年',
      //     quantityFlag: '1',
      //     quantity: 0,
      //     price: 1000
      //   },
      //   // 服务费
      //   {
      //     category: '服务费',
      //     subCategory: '普通遗体',
      //     name: '净身穿衣（人/次）',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   },
      //   {category: '服务费', subCategory: '普通遗体', name: '化妆（次）', quantityFlag: '0', quantity: 1, price: 1000},
      //   {
      //     category: '服务费',
      //     subCategory: '普通遗体',
      //     name: '接引流程、吊唁',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   },
      //   {
      //     category: '服务费',
      //     subCategory: '特殊遗体',
      //     name: '肥胖遗体、高度腐败、意外事故',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   },
      //   // 寿衣
      //   {category: '寿衣', subCategory: '套装', name: '现代装（西服、中山）', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '套装', name: '古装', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '被褥', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '鞋子', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '帽子', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '手套', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '头部枕', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '配件', name: '围巾、丝巾', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '宗教', name: '教服、袈裟', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '寿衣', subCategory: '宗教', name: '陀罗尼经被', quantityFlag: '0', quantity: 1, price: 1000},
      //   // 灵堂
      //   {category: '灵堂', subCategory: '贡品', name: '香道/佛教真香', quantity: 0, price: 1000},
      //   {category: '灵堂', subCategory: '物品', name: '套装', quantity: 0, price: 1000},
      //   // 小物件
      //   {
      //     category: '小物件',
      //     subCategory: '一次性物品',
      //     name: '手套、毛巾、棉球、折叠盆、饮料站',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   },
      //   {category: '小物件', subCategory: '遗像', name: '', quantityFlag: '0', quantity: 1, priceFlag: true, price: 0},
      //   {category: '小物件', subCategory: '灵位牌', name: '', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '小物件', subCategory: '童男女', name: '', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '小物件', subCategory: '陪侍用品', name: '', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '小物件', subCategory: '属相', name: '', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '小物件', subCategory: '孝服', name: '孝牌、孝带、孝衫', quantityFlag: '0', quantity: 1, price: 1000},
      //   {category: '小物件', subCategory: '骨灰三件套', name: '', quantityFlag: '0', quantity: 1, price: 1000},
      //   {
      //     category: '小物件',
      //     subCategory: '寄存福位用品',
      //     name: '狮子、葫芦、元宝、酒',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   },
      //   // 安葬
      //   {category: '安葬', subCategory: '随葬品', name: '陶瓷、水晶、玉石', quantityFlag: '1', quantity: 0, price: 1000},
      //   {category: '安葬', subCategory: '服务', name: '下葬、下葬车、迁坟', quantityFlag: '0', quantity: 1, price: 1000},
      //   {
      //     category: '安葬',
      //     subCategory: '海葬',
      //     name: '集体免费海葬、包船海葬、豪华海葬',
      //     quantityFlag: '0',
      //     quantity: 1,
      //     price: 1000
      //   }
      // ],
      showHPrint: false,
      billData: {
        formData: {},
        tableData: [],
        totalAmount: 0
      },
      tableData2: []
    }
  },
  computed: {
    totalAmount() {
      return this.tableData.reduce((sum, item) => {
        // return sum + (item.discountFlag === '1' ? item.quantity * item.price * (item.discount * 1) : item.quantity * item.price)
        return sum + (item.quantity * item.price)
      }, 0)
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    calculateAmount(row) {
      // return row.discountFlag === '1' ? row.quantity * row.price * (row.discount * 1) : row.quantity * row.price
      return row.quantity * row.price
    },
    calculateTotal() {
      // 触发计算总金额
    },
    saveBill() {
      this.$refs.formData.validate(async valid => {
        if (!valid) return

        this.loading = true
        try {
          // 保存账单逻辑
          let param = Object.assign({}, this.formData)
          param.items = this.tableData.map((e, i) => {
            return Object.assign({}, {
              productId: e.productId,
              quantity: e.quantity,
              discountValue: isEmpty(e.discountValue) ? 1 : e.discountValue * 1
            })
          })

          Req.createOrder(param).then(res => {
            console.log("order", res)
            if (res.code === 200) {
              this.$message.success('保存成功')
            }
          })
        } catch (error) {
          this.$message.error('订单创建失败')
        } finally {
          this.loading = false
        }
      })

    },
    printBill() {
      this.billData = {
        formData: this.formData,
        tableData: this.tableData,
        totalAmount: this.totalAmount
      }
      this.showHPrint = true
      // window.print()
    },
    onClose() {
      this.showHPrint = false
    },
    resetForm() {
      this.formData = {
        name: '',
        gender: '男',
        serviceDate: '',
        location: '',
        paymentMethod: '现金',
        familySignature: '',
        familyPhone: '',
        etiquetteName: '',
        etiquettePhone: ''
      }
      this.tableData.forEach(item => {
        item.quantity = 0
        item.price = 0
      })
    },
    objectSpanMethod({row, column, rowIndex, columnIndex}) {

      // 处理类别列的合并
      if (columnIndex === 1) {
        if (rowIndex === 0) {
          const categorySpan = this.getCategorySpan(rowIndex)
          return {
            rowspan: categorySpan,
            colspan: 1
          }
        } else {
          const prevRow = this.tableData[rowIndex - 1]
          if (prevRow && prevRow.category === row.category) {
            return {
              rowspan: 0,
              colspan: 0
            }
          } else {
            const categorySpan = this.getCategorySpan(rowIndex)
            return {
              rowspan: categorySpan,
              colspan: 1
            }
          }
        }
      }

      if (columnIndex === 2) {
        if (rowIndex === 0) {
          const subCategorySpan = this.getSubCategory(rowIndex)
          return {
            rowspan: subCategorySpan,
            colspan: 1
          }
        } else {
          const prevRow = this.tableData[rowIndex - 1]
          if (prevRow && prevRow.subCategory === row.subCategory) {
            return {
              rowspan: 0,
              colspan: 0
            }
          } else {
            const subCategorySpan = this.getSubCategory(rowIndex)
            return {
              rowspan: subCategorySpan,
              colspan: 1
            }
          }
        }
      }

      // if (columnIndex === 2) {
      //   // 服务费-普通通体(3行)
      //   if (rowIndex >= 0 && rowIndex <= 2) {
      //     if (rowIndex === 0) return {rowspan: 3, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //   // 服务费-特殊通体(1行)
      //   if (rowIndex === 3) return {rowspan: 1, colspan: 1};
      //
      //   // 寿衣-套装(2行)
      //   if (rowIndex >= 4 && rowIndex <= 5) {
      //     if (rowIndex === 4) return {rowspan: 2, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //   // 寿衣-配件(6行)
      //   if (rowIndex >= 6 && rowIndex <= 11) {
      //     if (rowIndex === 6) return {rowspan: 6, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //   // 寿衣-宗教(2行)
      //   if (rowIndex >= 12 && rowIndex <= 13) {
      //     if (rowIndex === 12) return {rowspan: 2, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //
      //   // 灵堂-贵品(2行)
      //   if (rowIndex >= 14 && rowIndex <= 15) {
      //     if (rowIndex === 14) return {rowspan: 2, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //   // 灵堂-一次性物品(1行)
      //   if (rowIndex === 16) return {rowspan: 1, colspan: 1};
      //
      //   // 烧盘缠-套装(1行)
      //   if (rowIndex === 34) return {rowspan: 1, colspan: 1};
      //   // 烧盘缠-单品(8行)
      //   if (rowIndex >= 35 && rowIndex <= 42) {
      //     if (rowIndex === 35) return {rowspan: 8, colspan: 1};
      //     return {rowspan: 0, colspan: 0};
      //   }
      //   // 烧盘缠-统七(1行)
      //   if (rowIndex === 43) return {rowspan: 1, colspan: 1};
      //
      //   // 安葬的子类(各1行)
      //   if (rowIndex >= 44 && rowIndex <= 46) {
      //     return {rowspan: 1, colspan: 1};
      //   }
      // }

    },
    // 获取类别跨度
    getCategorySpan(startIndex) {
      const category = this.tableData[startIndex].category
      let span = 1
      for (let i = startIndex + 1; i < this.tableData.length; i++) {
        if (this.tableData[i].category === category) {
          span++
        } else {
          break
        }
      }
      return span
    },
    // 获取子类跨度
    getSubCategory(startIndex) {
      const subCategory = this.tableData[startIndex].subCategory
      let span = 1
      for (let i = startIndex + 1; i < this.tableData.length; i++) {
        if (this.tableData[i].subCategory === subCategory) {
          span++
        } else {
          break
        }
      }
      return span
    },
    init() {
      this.getProduceList()
    },
    getProduceList() {
      Req.getProductList({}).then(res => {
        this.tableData = res.data
        this.tableData.forEach(e => {
          e.quantity = e.quantityFlag === '0' ? 1 : e.quantity
        })
      })
    }
  }
}